Amazon RDS プレビュー環境で MariaDB 11.4 が使えるようになっていたので、11.1 から登場した JSON_SCHEMA_VALID を使ってみた
いわさです。
Amazon RDS には一部エンジンバージョンを先行評価するための機能があります。
先日のアップデートで MariaDB 11.4 がプレビュー環境でサポートされました。
RDS プレビュー環境で MariaDB がサポートされるのは初ですね。
最初のころは Oracle と PostgreSQL くらいだったと思いますが、いつの間にやら様々なエンジンバージョンがサポートされていますね。
あとは SQL Server と IBM Db2 くらいか。
MariaDB のリリースサイクル・メンテナンスポリシーについて
今回使えるようになったのは MariaDB の 11.4.2 です。
MariaDB も他のエンジンと同様に、長期間サポートが行われる Long-Term Release と、短期間でサポートを終了する Short-Term Releases の概念があります。
MariaDB 11.4 は最新の Long-Term Release です。
2024 年 5 月 29 日に安定版の 11.4.2 がリリースされました。こちらのサポート終了日は 2029 年 5 月 29 日と 5 年間となっています。
本日時点で Amazon RDS 非プレビュー環境での MariaDB エンジンバージョンは 10.11.8 が最新となっています。
MariaDB 10.11 は、今回の 11.4 のひとつ前の Long-Term Release です。
10.11 の公式のサポート終了日は 2028 年 2 月 16 日ですが、RDS 標準サポート終了日は 2025 年 9 月である点に注意しましょう。
そして、10.11 と 11.4 の間のバージョンは全て Short-Term Releases で、Amazon RDS では提供されていません。サポート期間も 1 年と短いです。MySQL でいうイノベーションリリースのような扱いでしょうか。
MariaDB 11.4.2 インスタンスを作成
というわけで早速プレビュー環境で MariaDB 11.4.2 インスタンスを作成しましょう。
プレビュー環境は運用環境として使わないように気をつけてください。また一定期間で削除されるなど様々な制約があります。
オハイオリージョンの RDS プレビュー環境へアクセスし、次のように通常どおり作成するだけです。
初めて操作される方は以前の RDS プレビュー環境に関する記事も参考にしてください。
MariaDB が追加されていますね。選択出来るエンジンバージョンは 11.4.2 のみです。
コミュニティバージョンとしては 11.4.0 はアルファ版、11.4.1 は RC 版で、11.4.2 が初回の GA 版となっています。
作成して MySQL クライアントでアクセスしてみます。
% mysql -h hoge0717mariadb.cz8csseyg1xj.us-east-2.rds-preview.amazonaws.com -u admin -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 11.4.2-MariaDB-log managed by https://aws.amazon.com/rds/
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
サーバーバージョンが MariaDB の 11.4.2 であることが確認出来ました。
JSON_SCHEMA_VALID を使う
せっかくなので、11.4 の機能を何か確認しておきたいところです。
MariaDB 11.4 の新機能や変更点などは次のページを確認すると良いと思います。
11.4.1 から JSON フィールドのスキーマチェック関数が追加されているようです。
これはなかなか良いですね。MySQL 8 で使えるやつと同じかんじでしょうか。
制約付きのテーブルを作成してみます。
JSON_SCHEMA_VALID 内でスキーマの定義を行っています。
# テーブル作成
mysql> CREATE TABLE fuga (piyo JSON CHECK(JSON_SCHEMA_VALID('{"type":"object", "properties": {"hoge1":{"type":"number","maximum":5,"const":4}, "hoge2":{"type":"string","maxLength":5,"minLength":3}}, "required":["hoge1"]}', piyo)));
Query OK, 0 rows affected (0.21 sec)
こちらにレコードを作成してみましょう。
先ほど入力したスキーマ定義に反しているものは INSERT 処理に失敗しますね。
# INSERTしてみる(NG)
mysql> INSERT INTO fuga VALUES ('{"hoge1":1, "hoge2":"aaaa"}');
ERROR 4025 (23000): CONSTRAINT `fuga.piyo` failed for `hogedb`.`fuga`
mysql> INSERT INTO fuga VALUES ('{"hoge1":4, "hoge2":"aaaabbb"}');
ERROR 4025 (23000): CONSTRAINT `fuga.piyo` failed for `hogedb`.`fuga`
# INSERTしてみる(OK)
mysql> INSERT INTO fuga VALUES ('{"hoge1":4, "hoge2":"aaaa"}');
Query OK, 1 row affected (0.20 sec)
良い感じです。
さいごに
本日は Amazon RDS プレビュー環境で MariaDB 11.4 が使えるようになっていたので、11.1 から登場した JSON_SCHEMA_VALID を使ってみました。
RDS 標準サポート期間もそう長くはないので、RDS for MariaDB なワークロードを運用されている方はお早めに 11.4 での評価を行いたいところですね。
そういったテストに関してはこの RDS プレビュー環境を使うことが出来ますので、是非試してみてください。